//
//  JSSWebViewController.swift
//  WeiBoItem
//
//  Created by jss on 16/4/19.
//  Copyright © 2016年 jss. All rights reserved.
//

import UIKit
import SVProgressHUD

//授权回调地址 redirect_uri
let WB_REDIREC = "http://www.baidu.com/"
//appkey
let WB_APPKEY = "836160844"
// APP_SECRET
let WB_APP_SECRET = "bbe2adfd947c349581dce6ffc01089db"

class JSSWebViewController: UIViewController {
   
    
  //给当前控制器的根视图设置为webView
    override func loadView() {
        view = webView
        
        let str = "https://api.weibo.com/oauth2/authorize?client_id=836160844&redirect_uri=http://www.baidu.com/"
        let url = NSURL(string: str)
        let request = NSURLRequest(URL: url!)
        webView.loadRequest(request)
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
        
    }
    
    
    private func setupUI(){
        
        self.view.backgroundColor = UIColor.whiteColor()
        
        title = "登录"
        
        //添加导航栏左边按钮
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "取消", style: UIBarButtonItemStyle.Plain, target: self, action: "didCancal")
        //添加导航栏右边按钮
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: "autoFill")
        
    }
    
    //实现取消按钮监听方法
    @objc private func didCancal(){
        print("取消按钮被点击了")
        
        self.dismissViewControllerAnimated(true, completion: nil)
        
    }
    //实现自动填充按钮监听方法
    @objc private func autoFill() {
        print("自动填充按钮被点击了")
        
        //下面代码是从javascrip中的代码拼接的字符串
        let JSstr = "document.getElementById('userId').value='13122070252';document.getElementById('passwd').value='lgwan225802'"
        
        //用webView加载上面拼接的str
        webView.stringByEvaluatingJavaScriptFromString(JSstr)
        
    }
    
    //懒加载webview
    lazy var webView:UIWebView = {
        
        let web = UIWebView()
        
        web.delegate = self
        
        return web
        
    }()
    

}

//专门实现UIWebViewDelegate的代理方法的一个分类
extension JSSWebViewController: UIWebViewDelegate {
    
    //当webView将要加载一个request 的时候，就会调用以下这个方法，来询问一下是否要去加载这个request ，如果该方法返回 false ，就代表不去加载该request
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
//      print(request)
        
        //这个url会根据没次加载的授权页面 走一步会变成相对应页面的url 走的最后一个是 授权页回调的url 也就是上面注释的最后一个 目的就是为了取得code后面的那一串数字(授权码)
        
        //取到请求体里面的Url(授权接口中的url)
        guard let url = request.URL else{
            
            return false
        }
        
        //判断url的地址是否以回调页开头
        if url.absoluteString.hasPrefix(WB_REDIREC) {
            //能够进来这个方法 说明是以回调页开头的
            //从url里面截取授权码
            //query代表url后面的参数 (? 号后面的字符) (可以打印出来的)
            //print(url.query)
            
            //containsString :是否包含某个字符串
            if let q = url.query where q.containsString("code="){
                
                //截取授权码(截取字符串)
                let code = q.substringFromIndex("code=".endIndex)
                
                // print(code)//ee43a80e067029cb81cd1f274f3164d1  说明已经截取出来了
                
                //通过授权码获取 accessToken (访问令牌)
                 //loadAccessToken(code)
                
                //控制器只关心是否登录成功
            
                JSSUserAccountModel.sharedAccontModel.loadAccessToken(code, finished: { (isSuccess) -> () in
                    
                    //如果成功
                    if isSuccess {
                        //登录成功跳转控制器
                        print("登录成功 跳转页面")
                        
                        //let appDelegate = UIApplication.sharedApplication().delegate as?AppDelegate
                        
                        //登录成功跳转到 MainTabBarController(主页面)
                       // appDelegate?.window?.rootViewController = JSSWelcomViewController()
                      
                        NSNotificationCenter.defaultCenter().postNotificationName(JSSChangeRootVC, object: webView)
                        
                        
                    }else {
                        
                        //登录失败
                        print("登录失败")
                    }
                })
                
                // 要监听什么时候登录完成，可以给 ViewModel 传入一个闭包，在ViewModel里面登录完成之后调用该闭包就可以了
                // 代表真正的登录成功

            }
            
            return false
            
        }
        // print(url)
        
        // 判断是否是回调页，如果不是回调页，返回 false
        return true
    }

//    //加载AccessToken
//    func loadAccessToken(code:String) {
//        
//        let urlStr = "https://api.weibo.com/oauth2/access_token"
//        /* 从文档中复制出来的
//         必选	类型及范围	说明
//        client_id	true	string	申请应用时分配的AppKey。
//        client_secret	true	string	申请应用时分配的AppSecret。
//        grant_type	true	string	请求的类型，填写authorization_code
//        
//        grant_type为authorization_code时
//        必选	类型及范围	说明
//        code	true	string	调用authorize获得的code值。
//        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。*/
//        
//        let parametes = [
//        "client_id":WB_APPKEY,
//        "client_secret":WB_APP_SECRET,
//        "grant_type":"authorization_code",
//        "code":code,
//        "redirect_uri":WB_REDIREC
//        ]
//        //发请求(请求上面参数对应的值responseObject) 根据后台API 获取数据
//        HMNetworkTools.sharedTools.request(.Post, urlString: urlStr, parameters: parametes) { (responseObject, error) -> () in
//            if error != nil {
//                
//                print(error)
//                return
//            }
//            
//            //print("请求成功\(responseObject)")
//            
//            // // 如果 as 是写在 if let 或者 guard 里面，都使用 as?
//            guard let dict = responseObject as? [String:AnyObject] else {
//                
//                print("后台返回数据错误")
//                return
//            }
//            
//            //字典转模型
//           let accont = JSSUserAccont(dict: dict)
//            print(accont)
//            
//            // accessToken获取到了 获取个人信息
//            
//            self.loadUserInfo(accont)
//            
//           
//            
//        }
//        
//        
//    }
//    
//    //获取个人信息
//    func loadUserInfo(accont:JSSUserAccont){
//        
//        let urlStr = "https://api.weibo.com/2/users/show.json"
//        
//        /*
//        必选	类型及范围	说明
//        access_token	true	string	采用OAuth授权方式为必填参数，OAuth授权后获得。
//        uid	false	int64	需要查询的用户ID。
//        screen_name	false	string	需要查询的用户昵称。
//        */
//        //请求参数
//        let parametes = [
//        "access_token":accont.access_token ?? "",
//        "uid":accont.uid ?? ""
//        ]
//        
//        //发送请求
//        HMNetworkTools.sharedTools.request(.Get, urlString: urlStr, parameters: parametes) { (responseObject, error) -> () in
//            
//            print("方法被执行了")
//            print(responseObject)
//            
//            if error != nil {
//                print(error)
//                return
//            }
//            
//            //判断数据是否是字典
//            guard let dict = responseObject else {
//                
//                print("后台返回数据错误")
//                return
//            }
//            
//            // 如果等号前面是可选值的话，就使用 as? 如果是必选值，就使用 as!(获取到个人信息)
//            accont.name = dict["name"] as? String
//            accont.avatar_large = dict["avatar_large"] as? String
//            
//            //得到新的accont信息
//            print(accont)
//            //获取到个人信息 保存登录信息(归档方式保存)
//            self.saveAccout(accont)
//            
//           
//        }
//        
//        
//        
//    }
    
//   //归档(保存)用户信息
//   private func saveAccout(account:JSSUserAccont){
//        
//    let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString) .stringByAppendingPathComponent("accountArchive")
//    
//      NSKeyedArchiver.archiveRootObject(account, toFile: path)
//    
//    print(path)
//    
//    }
//   
//    //去沙盒读取用户信息
//   
//    private func accountInSandex()->JSSUserAccont? {
//         let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString) .stringByAppendingPathComponent("accountArchive")
//        //解档返回数据
//      let backDate = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? JSSUserAccont
//        
//        return backDate
//        
//    }
    
    //开始加载的时候调用
    func webViewDidStartLoad(webView:UIWebView) {
        
        SVProgressHUD.show()
    }

    //加载结束的时候调用
      func webViewDidFinishLoad(webView: UIWebView) {
        
         SVProgressHUD.dismiss()
    }
  
}
